/*!
* Copyright 2010 - 2015 Pentaho Corporation.  All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package org.pentaho.di.repository.pur;

import java.util.ArrayList;
import java.util.List;

import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.ObjectRevision;
import org.pentaho.di.repository.RepositoryElementInterface;
import org.pentaho.di.ui.repository.pur.services.IRevisionService;
import org.pentaho.platform.api.repository2.unified.IUnifiedRepository;
import org.pentaho.platform.api.repository2.unified.VersionSummary;

public class UnifiedRepositoryRevisionService implements IRevisionService {
  private final IUnifiedRepository unifiedRepository;
  private final RootRef rootRef;
  
  public UnifiedRepositoryRevisionService(IUnifiedRepository unifiedRepository, RootRef rootRef) {
    this.unifiedRepository = unifiedRepository;
    this.rootRef = rootRef;
  }

  @Override
  public List<ObjectRevision> getRevisions(final RepositoryElementInterface element) throws KettleException {
    return getRevisions(element.getObjectId());
  }

  @Override
  public List<ObjectRevision> getRevisions( ObjectId fileId ) throws KettleException {
    String absPath = null;
    try {
      List<ObjectRevision> versions = new ArrayList<ObjectRevision>();
      List<VersionSummary> versionSummaries = unifiedRepository.getVersionSummaries(fileId.getId());
      for (VersionSummary versionSummary : versionSummaries) {
        versions.add(new PurObjectRevision(versionSummary.getId(), versionSummary.getAuthor(),
            versionSummary.getDate(), versionSummary.getMessage()));
      }
      return versions;
    } catch (Exception e) {
      throw new KettleException("Could not retrieve version history of object with path [" + absPath + "]", e);
    }
  }

  @Override
  public void restoreJob( ObjectId id_job, String revision, String versionComment ) throws KettleException {
    unifiedRepository.restoreFileAtVersion(id_job.getId(), revision, versionComment);
    rootRef.clearRef();
  }

  @Override
  public void restoreTransformation( ObjectId id_transformation, String revision, String versionComment )
    throws KettleException {
    unifiedRepository.restoreFileAtVersion(id_transformation.getId(), revision, versionComment);
    rootRef.clearRef();
  }

}
